// src/types/rs/Permission.ts

// src/types/rs/Permission.ts

/** 完整的、跟后端完全一致的原始数据类型 */
export interface RawPermission {
  id: number;
  name: string;
  purl: string;
  component?: string;
  type: string;
  pid: number;
  is_delete: number;
  create_date: string;
  create_user: string;
  update_date: string;
  update_user: string;
  children: RawPermission[];
}

// src/types/rs/Permission.ts

/** 前端业务表单用类型 */
export interface PermissionForm {
  id?: number;
  name: string;          // 对应后端 name
  purl: string;          // 对应后端 purl
  type?: number;         // 1=组件, 2=方法
  component?: string;    // 组件路径，仅在 type=1 时使用
  pid: number;           // 父权限 ID，0 表示“无”
  createUser?: string;
  updateUser?: string;
}


/** 业务层使用的、字段更好读的类型 */
export interface Permission {
  id: number;
  name: string;
  purl: string;
  visible: number;
  icon?: string;
  pid: number;
  component?: string;
  is_delete: number;
  type: string;
  children: Permission[];
  createDate?: string;
  createUser?: string;
  updateDate?: string;
  updateUser?: string;
}

/**
 * 把 RawPermission 转成前端业务模型 Permission
 */
export function mapRawToPermission(r: RawPermission): Permission {
  return {
    id: r.id,
    name: r.name,
    purl: r.purl,
    visible: r.is_delete,
    pid: r.pid,
    component: r.component,
    type: r.type,
    createDate: r.create_date,
    createUser: r.create_user,
    updateDate: r.update_date,
    updateUser: r.update_user,
    // 递归地映射 children
    children: r.children?.map(mapRawToPermission) ?? []
  };
}


// DynamicRoute 接口，用于根据权限生成动态路由
export interface DynamicRoute {
    path: string;          // 路由路径
    name: string;          // 路由名称
    meta: {
        title: string;     // 路由标题
        icon?: string;     // 可选的路由图标
        parent?: string;   // 可选的父路由名称
    };
    component?: any;       // 可选的路由组件
    children: DynamicRoute[]; // 子路由数组
}

// UserInfo 接口，用于存储用户相关数据
export interface UserInfo {
    user: {
        id: number;        // 用户 ID
        userName: string;  // 用户名
        // 可根据需要添加其他用户属性
    } | null;
    permission: any;       // 权限数据的占位符（可根据需要调整）
    token: string | null;  // 认证令牌
}